package Ventanas.usuario;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import util.GetFrame;
import util.Varias;
import BaseDeDatos.ConsultasSensor;
import ClasesBasicas.Sensor;

public class PanelMenu extends javax.swing.JPanel implements ActionListener {

	private javax.swing.JButton bOffSensor;
	private javax.swing.JButton bOnSensor;
	private javax.swing.JButton bSalir;
	private javax.swing.JLabel estadoGPS;
	private javax.swing.JLabel estadoSensor;
	private javax.swing.JButton bhistoricoMedic;
	private javax.swing.JButton blistaSensores;
	private javax.swing.JButton bsubirFoto;
	private javax.swing.JButton bvalorSensor;
	private javax.swing.JButton bOnGPS;
	private javax.swing.JButton bOffGPS;
	private javax.swing.JComboBox comboModificarSensor;
	private javax.swing.JComboBox comboValorActual;
	private javax.swing.JComboBox comboHistorico;
	private List<Sensor> sensores = ConsultasSensor.getSensores();
	private String respuesta;
	private JLabel fondo;

	public PanelMenu() {

		blistaSensores = new javax.swing.JButton();
		bhistoricoMedic = new javax.swing.JButton();
		estadoSensor = new javax.swing.JLabel();
		estadoGPS = new javax.swing.JLabel();
		bvalorSensor = new javax.swing.JButton();
		bsubirFoto = new javax.swing.JButton();
		bSalir = new javax.swing.JButton();
		bOnSensor = new javax.swing.JButton();
		bOffSensor = new javax.swing.JButton();
		bOnGPS = new javax.swing.JButton();
		bOffGPS = new javax.swing.JButton();
		comboModificarSensor = new javax.swing.JComboBox();
		comboValorActual = new javax.swing.JComboBox();
		comboHistorico = new javax.swing.JComboBox();
		fondo = new JLabel();

		setLayout(null);

		this.setBackground(new Color(3, 41, 51));

		blistaSensores.setText("Lista sensores");
		add(blistaSensores);
		blistaSensores.setBounds(260, 230, 210, 38);
		blistaSensores.addActionListener(this);

		bhistoricoMedic.setText("Historico mediciones");
		add(bhistoricoMedic);
		bhistoricoMedic.setBounds(260, 280, 210, 37);
		bhistoricoMedic.addActionListener(this);

		estadoSensor.setText("Modificar estado sensor:");
		estadoSensor.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
		estadoSensor.setForeground(new java.awt.Color(255, 255, 255));
		add(estadoSensor);
		estadoSensor.setBounds(260, 330, 210, 36);

		estadoGPS.setText("Modificar estado GPS:");
		estadoGPS.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
		estadoGPS.setForeground(new java.awt.Color(255, 255, 255));
		add(estadoGPS);
		estadoGPS.setBounds(260, 380, 210, 33);

		bvalorSensor.setText("Valor actual sensor");
		add(bvalorSensor);
		bvalorSensor.setBounds(260, 430, 210, 36);
		bvalorSensor.addActionListener(this);

		bsubirFoto.setText("Obtener foto");
		add(bsubirFoto);
		bsubirFoto.setBounds(260, 480, 210, 35);
		bsubirFoto.addActionListener(this);

		bSalir.setText("Salir");
		add(bSalir);
		bSalir.setBounds(650, 520, 90, 40);
		bSalir.addActionListener(this);

		bOnSensor.setText("ON");
		add(bOnSensor);
		bOnSensor.setBounds(480, 330, 80, 30);
		bOnSensor.addActionListener(this);

		bOffSensor.setText("OFF");
		add(bOffSensor);
		bOffSensor.setBounds(580, 330, 80, 30);
		bOffSensor.addActionListener(this);

		bOnGPS.setText("ON");
		add(bOnGPS);
		bOnGPS.setBounds(480, 380, 80, 30);
		bOnGPS.addActionListener(this);

		bOffGPS.setText("OFF");
		add(bOffGPS);
		bOffGPS.setBounds(580, 380, 80, 30);
		bOffGPS.addActionListener(this);

		cargarCombo(comboModificarSensor, sensores);
		add(comboModificarSensor);
		comboModificarSensor.setBounds(120, 330, 90, 30);
		comboModificarSensor.addActionListener(this);

		Varias.cargarComboSensores(comboValorActual, sensores);
		add(comboValorActual);
		comboValorActual.setBounds(120, 430, 90, 30);
		comboValorActual.addActionListener(this);

		Varias.cargarComboSensores(comboHistorico, sensores);
		add(comboHistorico);
		comboHistorico.setBounds(120, 280, 90, 30);

		fondo.setIcon(new ImageIcon("src/resources/onda.png"));
		add(fondo);
		fondo.setBounds(125, 10, 516, 290);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		Ventana ventana = GetFrame.getVentana(this);
		respuesta = "";

		if (arg0.getSource() == blistaSensores) {
			ventana.escribir("LISTSENSOR" + '\n');
			respuesta = ventana.leer();
			String array[] = respuesta.split("%%");
			respuesta = Varias.formatear(array);
			JOptionPane.showMessageDialog(null, respuesta, "Lista de Sensores",
					JOptionPane.INFORMATION_MESSAGE);
			this.setVisible(false);
			PanelMenu panel = new PanelMenu();
			ventana.getContentPane().add(panel, 0);
			panel.setVisible(true);
		}
		if (arg0.getSource() == bhistoricoMedic) {
			ventana.escribir("HISTORICO " + comboHistorico.getSelectedItem()
					+ '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("223")) {
				String array[] = respuesta.split("%%");
				respuesta = Varias.formatear(array);
				JOptionPane.showMessageDialog(
						null,
						respuesta,
						"Historico del sensor "
								+ comboHistorico.getSelectedItem(),
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("524") || respuesta.contains("525")) {
				JOptionPane.showMessageDialog(null, respuesta,
						"Error Historico Sensor", JOptionPane.ERROR_MESSAGE);
			}
		}
		if (arg0.getSource() == bOnSensor) {
			ventana.escribir("ON " + comboModificarSensor.getSelectedItem()
					+ '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("313")) {
				JOptionPane.showMessageDialog(null, respuesta, "On Sensor "
						+ comboModificarSensor.getSelectedItem(),
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("527") || respuesta.contains("528")) {
				JOptionPane.showMessageDialog(null, respuesta,
						"Error al encender el sensor",
						JOptionPane.ERROR_MESSAGE);
			}
		}
		if (arg0.getSource() == bOffSensor) {
			ventana.escribir("OFF " + comboModificarSensor.getSelectedItem()
					+ '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("314")) {
				JOptionPane.showMessageDialog(null, respuesta, "Off Sensor "
						+ comboModificarSensor.getSelectedItem(),
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("527") || respuesta.contains("529")) {
				JOptionPane
						.showMessageDialog(null, respuesta,
								"Error al apagar el sensor ",
								JOptionPane.ERROR_MESSAGE);
			}
		}

		if (arg0.getSource() == bOnGPS) {
			ventana.escribir("ONGPS" + '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("315")) {
				JOptionPane.showMessageDialog(null, respuesta, "On Gps ",
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("529")) {
				JOptionPane.showMessageDialog(null, respuesta,
						"Error al activar GPS", JOptionPane.ERROR_MESSAGE);
			}
		}
		if (arg0.getSource() == bOffGPS) {
			ventana.escribir("OFFGPS" + '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("316")) {
				JOptionPane.showMessageDialog(null, respuesta, "Off Gps ",
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("530")) {
				JOptionPane.showMessageDialog(null, respuesta,
						"Error al apagar GPS", JOptionPane.ERROR_MESSAGE);
			}
		}
		if (arg0.getSource() == bvalorSensor) {
			ventana.escribir("GET_VALACT " + comboValorActual.getSelectedItem()
					+ '\n');
			respuesta = ventana.leer();
			if (respuesta.contains("224")) {
				String array[] = respuesta.split("%%");
				respuesta = Varias.formatear(array);
				JOptionPane.showMessageDialog(
						null,
						respuesta,
						"Valor actual del sensor "
								+ comboValorActual.getSelectedItem(),
						JOptionPane.INFORMATION_MESSAGE);
			} else if (respuesta.contains("524") || respuesta.contains("525")
					|| respuesta.contains("526")) {
				JOptionPane.showMessageDialog(null, respuesta,
						"Error al obtener valor actual",
						JOptionPane.ERROR_MESSAGE);
			}
		}
		if (arg0.getSource().equals(bsubirFoto)) {

			ventana = GetFrame.getVentana(this);
			ventana.escribir("GET_FOTO" + '\n');
			respuesta = ventana.leer();
			System.out.println("respuesta 1" + respuesta);

			if (respuesta.contains("316")) {
				int vueltas = Integer.parseInt(ventana.leer());
				int pasadas = 0;
				FileOutputStream foto = null;
				String nombreFoto = util.GenerarAleatorios.generar(0, 9999)
						+ ".jpg";
				try {
					foto = new FileOutputStream(new File(
							"src/resources/Camara/" + nombreFoto));
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				while (pasadas < vueltas) {
					try {
						System.out.println("Recibiendo imagen");
						foto.write(ventana.getSocketManager().getSocket()
								.getInputStream().read());
						pasadas++;
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				System.out.println("pasadas: " + pasadas);
				System.out.println("vueltas: " + vueltas);
				try {
					foto.flush();
					foto.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, respuesta + "" + vueltas
						+ "bytes transmitiendo." + '\n' + "...[" + vueltas
						+ " bytes]...", "Recibiendo foto... ",
						JOptionPane.INFORMATION_MESSAGE);
				JOptionPane.showMessageDialog(null, "Archivo " + nombreFoto
						+ " recibido con exito", "Foto Recibida ",
						JOptionPane.INFORMATION_MESSAGE);

				this.setVisible(false);
				PanelLocalizacion panel = new PanelLocalizacion();
				ventana.getContentPane().add(panel, 0);
				panel.setVisible(true);

			}
		}
		if (arg0.getSource().equals(bSalir)) {
			System.out.println("SALIR");
			ventana = GetFrame.getVentana(this);
			ventana.escribir("SALIR" + '\n');
			respuesta = ventana.leer();
			JOptionPane.showMessageDialog(null, respuesta,
					"ADIOS,VUELVA PRONTO", JOptionPane.INFORMATION_MESSAGE);
			ventana.salir();
			System.exit(0);
		}
	}

	public void cargarCombo(JComboBox combo, List<Sensor> lista) {
		for (int i = 0; i < lista.size(); i++) {
			combo.addItem(lista.get(i).getId_sensor());
		}
	}

}
